// 引入 常量管理的方法名称
import * as types from "../types";
// 引入 api/product的 增删改查的四个请求路由的方法
import {
  addCategory,
  deleteCategory,
  editCategory,
  getCategory,
} from "../../api/product";
import { treeFilter } from "../../utils/tree";

export default {
  state: {
    category: [],
  },
  getters: {
    //  导出 state中的数据 可以在 全局中利用 Mapgetters 使用
    treeCategory(state) {
      //   let category = JSON.parse(JSON.stringify(state.category));
      //   category = listToTree(category); // 列表转换成树状结构
      //   treeForeach(category, (node) => {
      //     if (node.children && node.children.length === 0) delete node.children;
      //   });
      //   return category;

      // return listToTree(state.category);
      return state.category;
    },
    //生产成两级的商品分类
    twoCategory(state) {
      const temp = JSON.parse(JSON.stringify(state.category));
      temp.forEach((item) => {
        item.children &&
          item.children.forEach((subitem) => delete subitem.children);
      });
      return temp;
    },
    // 筛选商品分类， 返回树状结构的数据
    filterTreeCategory(state, getters) {
      return function (keyword) {
        if (keyword.trim()) {
          return treeFilter(getters.treeCategory, (node) => {
            return node.id === keyword || node.name.includes(keyword);
          });
        } else {
          return getters.treeCategory;
        }
      };
    },
  },
  mutations: {
    [types.SET_CATEGORY](state, category) {
      state.category = category;
    },
  },
  actions: {
    //  commit 用来调用 mutations中的方法的 ，提交mutations
    async [types.SET_CATEGORY]({ commit }) {
      const { results } = await getCategory();
      commit(types.SET_CATEGORY, results);
    },
    //添加数据 把数据添加上去之后 在利用dispatch 调用 actions中的[types.SET_CATEGORY] 方法 来更新数据
    async [types.ADD_CATEGORY]({ dispatch }, data) {
      const result = await addCategory(data);
      // dispatch 用来调用 actions 中的方法
      await dispatch(types.SET_CATEGORY);
      return result;
    },
    async [types.EDIT_CATEGORY]({ dispatch }, data) {
      const result = await editCategory(data);
      await dispatch(types.SET_CATEGORY);
      return result;
    },
    async [types.DELETE_CATEGORY]({ dispatch }, data) {
      await deleteCategory(data);
      await dispatch(types.SET_CATEGORY);
      return data;
    },
  },
};
